function [PH,ax]=Plot_Line(XData,YData,InfoArgs)
arguments
    XData double;
    YData double;
    InfoArgs.T0 = 0;
    InfoArgs.LineProperty = [];
%     InfoArgs.AxisProperty = GR_Axis('Box','off');
    InfoArgs.XTick = [];
    InfoArgs.YTick = [];
    InfoArgs.Symmetric = 1;
    InfoArgs.ax = gca();
end
ax = InfoArgs.ax;
T = length(XData);
if size(YData,1)==T
    N       =   size(YData,2);
    YData   =   YData';
elseif size(YData,2)==T
    N       =   size(YData,1);
else
    error('The input YData does not match the dimension of XData');
end

if isempty(InfoArgs.LineProperty)
    LP = cell(N,1);
    for ii=1:N
        LP{ii} = GR_Line('Color',MyColor('Blue',1-ii/(N+1)));
    end
elseif ~iscell(InfoArgs.LineProperty) && N==1
    LP = {InfoArgs.LineProperty};
else
    LP = InfoArgs.LineProperty;
end

if isempty(InfoArgs.XTick)
    XTickValue = GR_TickValue('Unit',4).Setup(XData);
else
    XTickValue = InfoArgs.XTick;
end
if isempty(InfoArgs.YTick)
    YTickValue = GR_TickValue('Symmetric',InfoArgs.Symmetric).Setup(YData); 
else 
    YTickValue = InfoArgs.YTick;
end
if max(abs(YData))<1e-6
    YTickValue = GR_TickValue('Symmetric',InfoArgs.Symmetric).Setup([-0.1,0.1]);
end

PH = zeros(N,1);
for ii=1:N
    PH(ii) = LP{ii}.Plot(ax,XData,YData(ii,:));
    hold on;
end
if InfoArgs.Symmetric
    GR_Line('Color','Black','Width',0.3).Plot(ax,XData,zeros(size(XData)));
end

ax.YTick = YTickValue; ax.YLim = [min(YTickValue),max(YTickValue)];
ax.XTick = XTickValue; ax.XLim = [min(XTickValue),max(XTickValue)];

% InfoArgs.AxisProperty.Setup(ax);
